Administratorzy i technicy znaj▒ niezliczone historie o u┐ytkownikach, kt≤rzy nie maj▒ pojΩcia o bezpiecze±stwie w sieci i w niesko±czono╢µ wybieraj▒ has│a w stylu "has│o", "password", imiona ich dzieci, zwierz▒tek czy wreszcie ich w│asne. Ci nieco bardziej pomys│owi wybieraj▒ na chybi│ trafi│ has│o ze s│ownika, z billboardu czy jakiejkolwiek innej formy przekazu pisemnego. Kt≤┐ mog│by odkryµ w ten spos≤b wybrane has│o? C≤┐, komputer mo┐e. Dobrze jest pom≤c takiemu u┐ytkownikowi, okre╢laj▒c pewne zasady tworzenia hase│ i jak czΩsto powinny byµ one zmieniane. W praktyce te zasady zosta│y ju┐ wbudowane w wielu systemach autentyfikacji. W Sieci sprawa wygl▒da nieco inaczej.
Jedn▒ z metod, aby przyzwyczaiµ u┐ytkownika do u┐ywania bezpieczniejszych hase│ to weryfikacja wprowadzonych przez niego danych. Najpro╢ciej bΩdzie napisaµ funkcjΩ w JavaScript, kt≤ra tego dokona. Najwijmy pole formularza, w kt≤re u┐ytkownik wpisuje has│o 'pass'. Sprawdziµ pole mo┐na podczas wysy│ania formularza (metoda onSubmit) lub zaraz po tym jak pole zostanie wype│nione (metoda onBlur). NastΩpnie sprawdzimy, czy zmienna spe│nia nasze kryteria, je╢li wygenerujemy komunikat o b│Ωdzie.
Za│≤┐my, ┐e chcemy, aby has│a mia│y d│ugo╢µ przynajmniej 8 znak≤w, lecz nie wiΩcej ni┐ 16.
if ((pass.length < 8) || (pass.length > 16)) {
error = "Has│o musi mieµ przynajmniej 8 znak≤w i nie wiΩcej ni┐ 16.\n";
}
length to w│asno╢µ pola pass (tak je sobie wcze╢niej nazwali╢my). Teraz wypada│oby sprawdziµ czy zosta│y u┐yte tylko te znaki, kt≤re sobie ┐yczymy, czyli znaki alfanumeryczne, podkre╢lik, kropka i znak minus.
var dozwolone_znaki =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789
._-";
var tmp;
for (var i=0; i<pass.length; i++) {
tmp = "" + pass.substring(i, i+1);
if (dozwolone_znaki.indexOf(tmp) == "-1") {
error = "Podane has│o zawiera niedozwolone znaki.\n";
}
}
Metoda indexOf znajduje znak w podanym ci▒gu znak≤w, je╢li go znajdzie zwraca jego pozycjΩ, je╢li nie warto╢µ -1, kt≤ra jest wykorzystywana do sprawdzania i wygenerowania ewentualnej informacji o b│Ωdzie.
Jednak opisany wy┐ej spos≤b pozwala u┐ytkownikom na wpisywanie s│ownikowych hase│. Oto prosta funkcja w PHP, kt≤ra generuje losowe has│o o zadanej d│ugo╢ci:
<?
function losuj_haslo($dlugosc) {
$dozwolone_znaki = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$dozwolone_znaki .= "abcdefghijklmnopqrstuvwxyz";
$dozwolone_znaki .= "0123456789._-";
$haslo = '';
mt_srand((double) microtime() * 1000000);
for($i=0; $i<$dlugosc; $i++) {
$haslo .= substr($dozwolone_znaki, mt_rand(0, strlen($dozwolone_znaki), 1);
}
return $haslo;
}
?>
Jak ju┐ zosta│o napisane wy┐ej, funkcja ta generuje losowe has│o. Jeszcze tylko kilka s│≤w wyja╢nienia odno╢nie u┐ytych funkcji. Na pocz▒tek uruchomiony zostaje generator liczb pseudolosowych. "Pseudo" poniewa┐ losowane liczby to aktualny czas w mikrosekundach pomno┐ony przez milion. NastΩpnie w pΩtli wybieramy znaki ze zdefiniowanego wcze╢niej zbioru ($dozwolone_znaki). Kod zosta│ maxymalnie skr≤cony, przez co trudniej go zrozumieµ. Jednak jest to mo┐liwe. Funkcja substr() zwraca ci▒g znak≤w od podanego miejsca do ko±ca. Trzeci, opcjonalny, parametr tej funkcji to d│ugo╢µ zwracanego ci▒gu, w naszym przypadku jeden znak. Miejsce, od kt≤rego zaczynamy jest losowane przy u┐yciu funkcji mt_rand. Strlen zwraca d│ugo╢µ podanego ci▒gu znak≤w, wiΩc losowane liczby zawieraj▒ siΩ w przedziale od zera (pierwszy parametr) do d│ugo╢ci ci▒gu $dozwolone_znaki (drugi parametr). Strasznie to zawile napisane, ale w gruncie rzeczy bardzo proste do zrozumienia.
Tak wylosowane has│o mo┐na podes│aµ u┐ytkownikowi na jego email. Przy okazji sprawdzamy w ten spos≤b, czy poda│ prawdziwy adres.
Autor :
Marcin Zbijowski
zbijowski@webhelp.pl
http://www.js.isd.pl